// 非空断言运算符  !
// 可选连接运算符 ?  ?.
// 空值合并类型 ?? 
// Promise.all()
function f1(x: {name? : {firstName? : string, lastName : string}},callback?:()=>void) {
  // x 能不能.name
  console.log(x?.name?.firstName)
  console.log(x!.name!.firstName)
  // (!)对应的可以是方法 也可以是属性 ? 只能是属性
  callback!()
}
// console.log()
// f1({})
//  || 
const c = 0 || '10' // 隐式转换 false
console.log(c) // '10'  undefined 报错  0
// undefined 和 null 
let b = undefined ?? 10
console.log(b);
